package com.xfly.app.ui;

import android.graphics.Color;
import android.os.Bundle;
import android.provider.CalendarContract;
import android.support.annotation.ColorRes;
import android.util.Log;
import android.widget.TextView;

import com.github.mikephil.charting.charts.BarChart;
import com.github.mikephil.charting.charts.BarLineChartBase;
import com.github.mikephil.charting.charts.PieChart;
import com.github.mikephil.charting.components.AxisBase;
import com.github.mikephil.charting.components.Description;
import com.github.mikephil.charting.components.Legend;
import com.github.mikephil.charting.components.LimitLine;
import com.github.mikephil.charting.components.XAxis;
import com.github.mikephil.charting.components.YAxis;
import com.github.mikephil.charting.data.BarData;
import com.github.mikephil.charting.data.BarDataSet;
import com.github.mikephil.charting.data.BarEntry;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.formatter.IAxisValueFormatter;
import com.github.mikephil.charting.formatter.IValueFormatter;
import com.github.mikephil.charting.formatter.IndexAxisValueFormatter;
import com.github.mikephil.charting.formatter.ValueFormatter;
import com.github.mikephil.charting.highlight.Highlight;
import com.github.mikephil.charting.interfaces.datasets.IBarDataSet;
import com.github.mikephil.charting.listener.OnChartValueSelectedListener;
import com.github.mikephil.charting.utils.ColorTemplate;
import com.github.mikephil.charting.utils.ViewPortHandler;
import com.ptmall.app.R;
import com.ptmall.app.base.BaseMvpActivity;
import com.ptmall.app.bean.MultiGroupHistogramChildData;
import com.ptmall.app.bean.MultiGroupHistogramGroupData;
import com.ptmall.app.net.api.ApiDataRepository;
import com.ptmall.app.net.base.ApiNetResponse;
import com.ptmall.app.utils.GlideUtil;
import com.ptmall.app.view.HistogramView;
import com.ptmall.app.view.MultiGroupHistogramView;
import com.ptmall.app.view.PieChartManager;
import com.ptmall.app.view.TitleBarView;
import com.xfly.app.bean.FxBean;
import com.xfly.app.bean.UserBean;
import com.xfly.app.view.wellijohn.org.varchart.exception.YCoordinateException;
import com.xfly.app.view.wellijohn.org.varchart.hor_bar_with_line_chart.ChartLine;
import com.xfly.app.view.wellijohn.org.varchart.vo.CategoryVo;
import com.xfly.app.view.wellijohn.org.varchart.vo.DotVo;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;

public class FxActivity extends BaseMvpActivity implements OnChartValueSelectedListener {

    ApiDataRepository apiDataRepository = ApiDataRepository.getInstance();

    FxBean mFxBean;
    List<BarEntry> list = new ArrayList<>();

    private BarChart mBarChart,mBarChart2;

    PieChart pie_chart;

    //多条折线的坐标点
    private List<List<DotVo>> mMulListDisDots;

    //x轴的点
    private String[] mXdots ;
    TitleBarView title_bar;
    List<Long> yline = new ArrayList<>();
    List<String> xline = new ArrayList<>();

    private double mMax = 44;

    private Random rand = new Random();

    private List<CategoryVo> mCategoryList;

    private TextView time,shopname;


    public FxActivity() {
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setView(R.layout.activity_xsfx);
    }

    @Override
    public void initViews() {

        time = findViewById(R.id.time);
        title_bar = findViewById(R.id.title_bar);
        shopname = findViewById(R.id.shopname);
        pie_chart = findViewById(R.id.pie_chart);

        title_bar.setText("销售数据分析");
    }

    @Override
    public void initEvents() {
        getdata();
        title_bar.setOnTitleBarClickListener(new TitleBarView.TitleBarClickListener() {
            @Override
            public void leftClick() {
                finish();
            }

            @Override
            public void rightClick() {

            }
        });
    }

    private void getdata(){
        apiDataRepository.getfx(null, new ApiNetResponse<FxBean>(getContext()) {
            @Override
            public void onSuccess(FxBean data) {
                mFxBean = data;
                time.setText(data.getDay().get(0).getDay());
                initView();
                mBarChart.invalidate();
                initPieChat();
            }
        });


        apiDataRepository.myInfo(null, new ApiNetResponse<UserBean>() {
            @Override
            public void onSuccess(UserBean data) {
                shopname.setText(data.getApply_name());
            }
        });
    }


    private void initPieChat() {

        List<String> names = new ArrayList<>(); //每个模块的内容描述
        List<Float> date = new ArrayList<>(); //每个模块的值（占比率）
        List<Integer> colors = new ArrayList<>(); //每个模块的颜色
        for(FxBean.ItemsBean bean:mFxBean.getItems()){
            names.add(bean.getTitle());
//            date.add(1f);
            date.add(new BigDecimal(bean.getPrice()).floatValue());
//            colors.add(Color.parseColor(getRandColor()));
        }
        colors.add(0xffC5904C);
        colors.add(0xffFDE794);
        colors.add(0xff33FF33);
        colors.add(0xff33CCFF);
        colors.add(0xffFF99CC);
        colors.add(0xffFF0099);
        colors.add(0xffFFFF99);
        //饼状图管理类
        PieChartManager pieChartManager1 = new PieChartManager(pie_chart);
        pieChartManager1.setSolidPieChart(names, date, colors);
    }
    /**
     * 获取十六进制的颜色代码.例如  "#5A6677"
     * 分别取R、G、B的随机值，然后加起来即可
     *
     * @return String
     */
    public static String getRandColor() {
        String R, G, B;
        Random random = new Random();
        R = Integer.toHexString(random.nextInt(256)).toUpperCase();
        G = Integer.toHexString(random.nextInt(256)).toUpperCase();
        B = Integer.toHexString(random.nextInt(256)).toUpperCase();

        R = R.length() == 1 ? "0" + R : R;
        G = G.length() == 1 ? "0" + G : G;
        B = B.length() == 1 ? "0" + B : B;

        return "#" + R + G + B;
    }


    //初始化
    private void initView() {
        //柱状图
        mBarChart = (BarChart) findViewById(R.id.mBarChart);
        mBarChart2 = (BarChart) findViewById(R.id.mBarChart2);
        //设置柱状图点击的时候，的回调函数
        mBarChart.setOnChartValueSelectedListener(this);
        //柱状图的阴影
        mBarChart.setDrawBarShadow(false);
        //设置柱状图Value值显示在柱状图上方 true 为显示上方，默认false value值显示在柱状图里面
        mBarChart.setDrawValueAboveBar(true);
        //Description Label 是否可见
        mBarChart.getDescription().setEnabled(false);
        // 设置最大可见Value值的数量 针对于ValueFormartter有效果
        mBarChart.setMaxVisibleValueCount(1000);
        // 二指控制X轴Y轴同时放大
        mBarChart.setPinchZoom(false);
        //是否显示表格背景颜色
        mBarChart.setDrawGridBackground(false);
        //设置柱状图点击的时候，的回调函数
        mBarChart2.setOnChartValueSelectedListener(this);
        //柱状图的阴影
        mBarChart2.setDrawBarShadow(false);
        //设置柱状图Value值显示在柱状图上方 true 为显示上方，默认false value值显示在柱状图里面
        mBarChart2.setDrawValueAboveBar(true);
        //Description Label 是否可见
        mBarChart2.getDescription().setEnabled(false);
        // 设置最大可见Value值的数量 针对于ValueFormartter有效果
        mBarChart2.setMaxVisibleValueCount(1000);
        // 二指控制X轴Y轴同时放大
        mBarChart2.setPinchZoom(false);
        //是否显示表格背景颜色
        mBarChart2.setDrawGridBackground(false);
        //设置X轴显示文字旋转角度-60意为逆时针旋转60度
//        mBarChart.getXAxis().setLabelRotationAngle(-60);


        XAxis xAxis = mBarChart.getXAxis();
        XAxis xAxis2 = mBarChart2.getXAxis();
        //设置X轴显示位置
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
        //X轴纵向分割线，一般不设置显示
        xAxis.setDrawGridLines(false);
        // X轴显示Value值的精度，与自定义X轴返回的Value值精度一致
        xAxis.setGranularity(1f);
        //X轴横坐标显示的数量
        xAxis.setLabelCount(7);
        //X轴最大坐标
        xAxis.setAxisMaximum(6f);
        //X轴最小坐标
        xAxis.setAxisMinimum(0.5f);
        //设置X轴显示位置
        xAxis2.setPosition(XAxis.XAxisPosition.BOTTOM);
        //X轴纵向分割线，一般不设置显示
        xAxis2.setDrawGridLines(false);
        // X轴显示Value值的精度，与自定义X轴返回的Value值精度一致
        xAxis2.setGranularity(1f);
        //X轴横坐标显示的数量
        xAxis2.setLabelCount(7);
        //X轴最大坐标
        xAxis2.setAxisMaximum(6f);
        //X轴最小坐标
        xAxis2.setAxisMinimum(0.5f);
        //自定义X轴
//        xAxis.setValueFormatter(new ValueFormatter() {
//            @Override
//            public String getFormattedValue(float value, AxisBase axis) {
//                Log.i("fx", mFxBean.getDay().get(new BigDecimal(value).intValue()).getDay()+"----");
//                return mFxBean.getDay().get(new BigDecimal(value).intValue()).getDay();
//            }
//        });

        xAxis.setValueFormatter(new IndexAxisValueFormatter(){
            @Override
            public String getFormattedValue(float value) {
                Log.i("fx", mFxBean.getDay().get(new BigDecimal(value).intValue()).getDay()+"----");
                return mFxBean.getDay().get(new BigDecimal(value).intValue()).getDay();
            }
        });
        xAxis2.setValueFormatter(new IndexAxisValueFormatter(){
            @Override
            public String getFormattedValue(float value) {
                Log.i("fx", mFxBean.getDay().get(new BigDecimal(value).intValue()).getDay()+"----");
                return mFxBean.getDay().get(new BigDecimal(value).intValue()).getDay();
            }
        });



        //点击柱状图时显示的悬浮提示
//        XYMarkerView mv = new XYMarkerView(this, xAxisFormatter);
//        mv.setChartView(mBarChart);
//        mBarChart.setMarker(mv);

        //Y左边轴
        YAxis leftAxis = mBarChart.getAxisLeft();
        YAxis leftAxis2 = mBarChart2.getAxisLeft();
        //设置Y左边轴显示的值 label 数量
        leftAxis.setLabelCount(5, false);
        //设置值显示的位置，我们这里设置为显示在Y轴外面
        leftAxis.setPosition(YAxis.YAxisLabelPosition.OUTSIDE_CHART);
        //设置Y轴 与值的空间空隙 这里设置30f意为30%空隙，默认是10%
        leftAxis.setSpaceTop(30f);
        //设置Y轴最小坐标和最大坐标
        leftAxis.setAxisMinimum(0f);
        leftAxis.setAxisMaximum(80f);
        //设置Y左边轴显示的值 label 数量
        leftAxis2.setLabelCount(5, false);
        //设置值显示的位置，我们这里设置为显示在Y轴外面
        leftAxis2.setPosition(YAxis.YAxisLabelPosition.OUTSIDE_CHART);
        //设置Y轴 与值的空间空隙 这里设置30f意为30%空隙，默认是10%
        leftAxis2.setSpaceTop(30f);
        //设置Y轴最小坐标和最大坐标
        leftAxis2.setAxisMinimum(0f);
        leftAxis2.setAxisMaximum(80f);

        //Y轴右边轴的设置，跟左边轴类似
        YAxis rightAxis = mBarChart.getAxisRight();
        YAxis rightAxis2 = mBarChart2.getAxisRight();
        rightAxis.setLabelCount(5, false);
        //设置值显示的位置，我们这里设置为显示在Y轴外面
        rightAxis.setPosition(YAxis.YAxisLabelPosition.OUTSIDE_CHART);
        //设置Y轴 与值的空间空隙 这里设置30f意为30%空隙，默认是10%
        rightAxis.setSpaceTop(30f);
        //设置Y轴最小坐标和最大坐标
        rightAxis.setAxisMinimum(0f);
        rightAxis.setAxisMaximum(80f);
        rightAxis2.setLabelCount(5, false);
        //设置值显示的位置，我们这里设置为显示在Y轴外面
        rightAxis2.setPosition(YAxis.YAxisLabelPosition.OUTSIDE_CHART);
        //设置Y轴 与值的空间空隙 这里设置30f意为30%空隙，默认是10%
        rightAxis2.setSpaceTop(30f);
        //设置Y轴最小坐标和最大坐标
        rightAxis2.setAxisMinimum(0f);
        rightAxis2.setAxisMaximum(80f);

        // 设置表格标示的位置
        Legend l = mBarChart.getLegend();
        //标示坐落再表格左下方
        l.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM);
        l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT);
        //标示水平朝向
        l.setOrientation(Legend.LegendOrientation.HORIZONTAL);
        //标示在表格外
        l.setDrawInside(false);
        //样式
        l.setForm(Legend.LegendForm.NONE);
        //字体
        l.setFormSize(9f);
        //大小
        l.setTextSize(11f);
        Legend l2 = mBarChart2.getLegend();
        //标示坐落再表格左下方
        l2.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM);
        l2.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT);
        //标示水平朝向
        l2.setOrientation(Legend.LegendOrientation.HORIZONTAL);
        //标示在表格外
        l2.setDrawInside(false);
        //样式
        l2.setForm(Legend.LegendForm.NONE);
        //字体
        l2.setFormSize(9f);
        //大小
        l2.setTextSize(11f);

        //模拟数据
//        ArrayList<BarEntry> yVals1 = new ArrayList<BarEntry>();
//        yVals1.add(new BarEntry(1.2f, 10,"微信"));
//        yVals1.add(new BarEntry(2.2f, 20,"qq"));
//        yVals1.add(new BarEntry(3.2f, 30,"陌陌"));
//        yVals1.add(new BarEntry(4.2f, 40,"百度"));
//        yVals1.add(new BarEntry(5.2f, 50,"支付宝"));
//
//        setData(yVals1);

                ArrayList<BarEntry> yVals1 = new ArrayList<BarEntry>();
                for(int i=0;i<mFxBean.getDay().size();i++){
                    yVals1.add(new BarEntry(i, new BigDecimal(mFxBean.getDay().get(i).getPrice()).floatValue(),""));
                }
                setData(yVals1);

                ArrayList<BarEntry> yVals2 = new ArrayList<BarEntry>();
                for(int i=0;i<mFxBean.getMonth().size();i++){
                    yVals2.add(new BarEntry(i, new BigDecimal(mFxBean.getMonth().get(i).getPrice()).floatValue(),""));
                }
                setData2(yVals2);

    }

    /**
     *
     //        ArrayList<BarEntry> yVals1 = new ArrayList<BarEntry>();
     //        for(int i=0;i<mFxBean.getDay().size();i++){
     //            yVals1.add(new BarEntry(i, new BigDecimal(mFxBean.getDay().get(i).getPrice()).floatValue()));
     //        }
     //        setData(yVals1);
     * */

    //设置数据
    private void setData(ArrayList yVals1) {
        float start = 1f;
        BarDataSet set1;
        if (mBarChart.getData() != null &&
                mBarChart.getData().getDataSetCount() > 0) {
            set1 = (BarDataSet) mBarChart.getData().getDataSetByIndex(0);
            set1.setValues(yVals1);
            mBarChart.getData().notifyDataChanged();
            mBarChart.notifyDataSetChanged();
        } else {
            set1 = new BarDataSet(yVals1, "");
            //设置有四种颜色
            set1.setColors(0xffFF7F50);
            ArrayList<IBarDataSet> dataSets = new ArrayList<IBarDataSet>();
            dataSets.add(set1);
            BarData data = new BarData(dataSets);
            data.setValueTextSize(10f);
            data.setBarWidth(0.6f);
            data.setValueFormatter(new ValueFormatter() {
                @Override
                public String getFormattedValue(float value, AxisBase axis) {
                    return super.getFormattedValue(value, axis);
                }
            });
            //设置数据
            mBarChart.setData(data);
        }
    }
    private void setData2(ArrayList yVals1) {
        float start = 1f;
        BarDataSet set1;
        if (mBarChart2.getData() != null &&
                mBarChart2.getData().getDataSetCount() > 0) {
            set1 = (BarDataSet) mBarChart2.getData().getDataSetByIndex(0);
            set1.setValues(yVals1);
            mBarChart2.getData().notifyDataChanged();
            mBarChart2.notifyDataSetChanged();
        } else {
            set1 = new BarDataSet(yVals1, "");
            //设置有四种颜色
            set1.setColors(0xffFF7F50);
            ArrayList<IBarDataSet> dataSets = new ArrayList<IBarDataSet>();
            dataSets.add(set1);
            BarData data = new BarData(dataSets);
            data.setValueTextSize(10f);
            data.setBarWidth(0.6f);
            data.setValueFormatter(new ValueFormatter() {
                @Override
                public String getFormattedValue(float value, AxisBase axis) {
                    return super.getFormattedValue(value, axis);
                }
            });
            //设置数据
            mBarChart2.setData(data);
        }
    }


    @Override
    public void onValueSelected(Entry e, Highlight h) {

    }

    @Override
    public void onNothingSelected() {

    }


}
